package java_1_8.abstract_test;
//咖啡因饮品-父类-抽象类
public abstract class CaffeineBeverage {
    //制作流程-标准化-封装到父类中，子类只有使用权不能修改
    // 定义为final修饰，这个方法让子类不能覆写（因为能覆写就可以做到修改，父类不能限制到这个修改）
    public final void prepareRecipe(){
        boilWater();//烧水-父类实现
        brew();//泡-具体到子类-对应饮品泡法不同
        pourIncup();//倒入杯子-父类可以实现
 //       addCondiments();//加调味品-具体到子类-对应饮品添加何种调味品
        if(isCustomerWantsCondiments()){
            addCondiments();
        }
    }
    //对于浸泡和加调味品，不同子类实现细节不同，用抽象方法，延迟到具体子类具体实现
    public abstract void addCondiments();
    public abstract void brew();
    //烧水倒杯子父类写好，子类使用即可
    public void pourIncup() {
        System.out.println("pouring into cup");
    }
    public void boilWater() {
        System.out.println("boiling water");
    }

    public boolean isCustomerWantsCondiments(){
        return true;//父类中默认加调料--如果有得子类可以选择不加，覆写子方法即可
    }
}
